////////////////////////////////////////////
//   CColor.h : Utilisation de couleurs   //
//      dans du texte en mode console     //
//           (ANSI Color Codes)           // 
////////////////////////////////////////////
//        Developpe par Soilwork          //
//              Version 0.9               //
//        Creation : 26/08/2004           //
//   Derniere Modification : 15/11/2004   //
////////////////////////////////////////////

//Cette classe permet de définir une "couleur" (ie. couleur de fond, d'ecriture
// + attributs éventuels), et de récupérer la séquence d'échap. correspondante

#ifndef CCOLOR_H_INCLUDED
#define CCOLOR_H_INCLUDED

//#define COLORS_ENABLED

#define ATTRIB_NONE             0
#define ATTRIB_BOLD             1
#define ATTRIB_ITALIC           2
#define ATTRIB_UNDERLINE        4
#define ATTRIB_BLINK            8
#define ATTRIB_REVERSE          16
#define ATTRIB_CONCEALED        32
#define ATTRIB_STRIKETHROUGH    64

#define BLACK         0
#define RED           1
#define GREEN         2
#define YELLOW        3
#define BLUE          4
#define PINK          5
#define CYAN          6
#define WHITE         7
#define DEFAULT_COLOR 8

class CColor
{
private:
    //Couleurs de fond et d'ecriture
    int bgColor, fgColor;
    
    //Differents attributs disponibles
    int attributes;
    
    //Remarque : Quand ces variables valent -1, cela signifie qu'elles ne sont
    //pas prises en compte lors de la generation de la sequence d'echappement
    // Comme ca, on peut generer simplement : \033[8m par exemple
    
public:
    //Constructeurs:
    CColor(int foreground=-1, int background=-1, int att=-1);
            
    CColor(const CColor &color){bgColor=color.getBGColor();
                         fgColor=color.getFGColor();
                         attributes=color.getAttributes();}
    
    //Accesseurs
    void setFGColor(int color);
    void setBGColor(int color);
    void setAttributes(int att);
    
    int getBGColor() const{return bgColor;}
    int getFGColor() const{return fgColor;}
    int getAttributes() const{return attributes;}
    
    //Retire un attribut précis
    void removeAttribute(int att);
    
    //Remet les valeurs a -1
    void reset();
    //Restaure les valeurs par defaut
    void resetDefault();
    
    //Retourne la séquence d'échappement correspondante...
    char *getColorCode() const;
    
    //Efface l'écran
    char *clearScreen() const;
};

#endif //CCOLOR_H_INCLUDED
